home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / xfs / xfs_dir2_node.h < prev    next >
C/C++ Source or Header  |  2005-10-18  |  5KB  |  160 lines

  1. /*
  2.  * Copyright (c) 2000 Silicon Graphics, Inc.  All Rights Reserved.
  3.  *
  4.  * This program is free software; you can redistribute it and/or modify it
  5.  * under the terms of version 2 of the GNU General Public License as
  6.  * published by the Free Software Foundation.
  7.  *
  8.  * This program is distributed in the hope that it would be useful, but
  9.  * WITHOUT ANY WARRANTY; without even the implied warranty of
  10.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  11.  *
  12.  * Further, this software is distributed without any warranty that it is
  13.  * free of the rightful claim of any third person regarding infringement
  14.  * or the like.  Any license provided herein, whether implied or
  15.  * otherwise, applies only to this software file.  Patent licenses, if
  16.  * any, provided herein do not apply to combinations of this program with
  17.  * other software, or any other product whatsoever.
  18.  *
  19.  * You should have received a copy of the GNU General Public License along
  20.  * with this program; if not, write the Free Software Foundation, Inc., 59
  21.  * Temple Place - Suite 330, Boston MA 02111-1307, USA.
  22.  *
  23.  * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
  24.  * Mountain View, CA  94043, or:
  25.  *
  26.  * http://www.sgi.com
  27.  *
  28.  * For further information regarding this notice, see:
  29.  *
  30.  * http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/
  31.  */
  32. #ifndef __XFS_DIR2_NODE_H__
  33. #define    __XFS_DIR2_NODE_H__
  34.  
  35. /*
  36.  * Directory version 2, btree node format structures
  37.  */
  38.  
  39. struct uio;
  40. struct xfs_dabuf;
  41. struct xfs_da_args;
  42. struct xfs_da_state;
  43. struct xfs_da_state_blk;
  44. struct xfs_inode;
  45. struct xfs_trans;
  46.  
  47. /*
  48.  * Constants.
  49.  */
  50.  
  51. /*
  52.  * Offset of the freespace index.
  53.  */
  54. #define    XFS_DIR2_FREE_SPACE    2
  55. #define    XFS_DIR2_FREE_OFFSET    (XFS_DIR2_FREE_SPACE * XFS_DIR2_SPACE_SIZE)
  56. #define    XFS_DIR2_FREE_FIRSTDB(mp)    \
  57.     XFS_DIR2_BYTE_TO_DB(mp, XFS_DIR2_FREE_OFFSET)
  58.  
  59. #define    XFS_DIR2_FREE_MAGIC    0x58443246    /* XD2F */
  60.  
  61. /*
  62.  * Structures.
  63.  */
  64. typedef    struct xfs_dir2_free_hdr {
  65.     __uint32_t        magic;        /* XFS_DIR2_FREE_MAGIC */
  66.     __int32_t        firstdb;    /* db of first entry */
  67.     __int32_t        nvalid;        /* count of valid entries */
  68.     __int32_t        nused;        /* count of used entries */
  69. } xfs_dir2_free_hdr_t;
  70.  
  71. typedef struct xfs_dir2_free {
  72.     xfs_dir2_free_hdr_t    hdr;        /* block header */
  73.     xfs_dir2_data_off_t    bests[1];    /* best free counts */
  74.                         /* unused entries are -1 */
  75. } xfs_dir2_free_t;
  76. #define    XFS_DIR2_MAX_FREE_BESTS(mp)    \
  77.     (((mp)->m_dirblksize - (uint)sizeof(xfs_dir2_free_hdr_t)) / \
  78.      (uint)sizeof(xfs_dir2_data_off_t))
  79.  
  80. /*
  81.  * Macros.
  82.  */
  83.  
  84. /*
  85.  * Convert data space db to the corresponding free db.
  86.  */
  87. #if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_DIR2_DB_TO_FDB)
  88. xfs_dir2_db_t
  89. xfs_dir2_db_to_fdb(struct xfs_mount *mp, xfs_dir2_db_t db);
  90. #define    XFS_DIR2_DB_TO_FDB(mp,db)    xfs_dir2_db_to_fdb(mp, db)
  91. #else
  92. #define    XFS_DIR2_DB_TO_FDB(mp,db)    \
  93.     (XFS_DIR2_FREE_FIRSTDB(mp) + (db) / XFS_DIR2_MAX_FREE_BESTS(mp))
  94. #endif
  95.  
  96. /*
  97.  * Convert data space db to the corresponding index in a free db.
  98.  */
  99. #if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_DIR2_DB_TO_FDINDEX)
  100. int
  101. xfs_dir2_db_to_fdindex(struct xfs_mount *mp, xfs_dir2_db_t db);
  102. #define    XFS_DIR2_DB_TO_FDINDEX(mp,db)    xfs_dir2_db_to_fdindex(mp, db)
  103. #else
  104. #define    XFS_DIR2_DB_TO_FDINDEX(mp,db)    ((db) % XFS_DIR2_MAX_FREE_BESTS(mp))
  105. #endif
  106.  
  107. /*
  108.  * Functions.
  109.  */
  110.  
  111. extern void
  112.     xfs_dir2_free_log_bests(struct xfs_trans *tp, struct xfs_dabuf *bp,
  113.                 int first, int last);
  114.  
  115. extern int
  116.     xfs_dir2_leaf_to_node(struct xfs_da_args *args, struct xfs_dabuf *lbp);
  117.  
  118. extern xfs_dahash_t
  119.     xfs_dir2_leafn_lasthash(struct xfs_dabuf *bp, int *count);
  120.  
  121. extern int
  122.     xfs_dir2_leafn_lookup_int(struct xfs_dabuf *bp,
  123.                   struct xfs_da_args *args, int *indexp,
  124.                   struct xfs_da_state *state);
  125.  
  126. extern int
  127.     xfs_dir2_leafn_order(struct xfs_dabuf *leaf1_bp,
  128.                  struct xfs_dabuf *leaf2_bp);
  129.  
  130. extern int
  131.     xfs_dir2_leafn_split(struct xfs_da_state *state,
  132.                  struct xfs_da_state_blk *oldblk,
  133.                  struct xfs_da_state_blk *newblk);
  134.  
  135. extern int
  136.     xfs_dir2_leafn_toosmall(struct xfs_da_state *state, int *action);
  137.  
  138. extern void
  139.     xfs_dir2_leafn_unbalance(struct xfs_da_state *state,
  140.                  struct xfs_da_state_blk *drop_blk,
  141.                  struct xfs_da_state_blk *save_blk);
  142.  
  143. extern int
  144.     xfs_dir2_node_addname(struct xfs_da_args *args);
  145.  
  146. extern int
  147.     xfs_dir2_node_lookup(struct xfs_da_args *args);
  148.  
  149. extern int
  150.     xfs_dir2_node_removename(struct xfs_da_args *args);
  151.  
  152. extern int
  153.     xfs_dir2_node_replace(struct xfs_da_args *args);
  154.  
  155. extern int
  156.     xfs_dir2_node_trim_free(struct xfs_da_args *args, xfs_fileoff_t fo,
  157.                 int *rvalp);
  158.  
  159. #endif    /* __XFS_DIR2_NODE_H__ */
  160.